import Vue from 'vue'
import Vuex from 'vuex'

Vue.use(Vuex)

export default new Vuex.Store({
  state: {
    count: 0
  },
  // 只有 mutations 中定义的函数，才可以修改 state 中的数据
  // 不要在 mutations 函数中，执行异步操作
  mutations: {
    // mutations 中定义的方法，第一个参数都是 state
    add (state) {
      state.count++
    },
    addN (state, step) {
      state.count += step
    },
    addN2 (state, step) {
      state.count += step
    },
    sub (state) {
      state.count--
    },
    subN (state, step) {
      state.count -= step
    }
  },
  // actions 中定义的方法负责执行异步操作
  // 在 actions 中，不能直接修改 state 中的数据；
  // 必须通过 context.commit() 触发某个 mutation 才行
  actions: {
    addAsync (context, step) {
      setTimeout(() => {
        context.commit('addN', step)
      }, 1000)
    },
    subNAsync (context, step) {
      setTimeout(() => {
        context.commit('subN', step)
      }, 1000)
    }
  },
  modules: {
  },
  getters: {
    showNum (state) {
      return '当前最新数量： 【' + state.count + '】'
    }
  }
})
